<?php

require_once '../api/service/StaffDB.php';

$jsonFilePath = __DIR__ . '/staffs.json'; // JSON文件路径
$batchSize    = 50;                       // 每批处理数量（防止内存溢出）

// 统计变量
$successCount = 0;
$failCount    = 0;
$errorLog     = [];

try {
  // 1. 检查JSON文件是否存在
  if (! file_exists($jsonFilePath)) {
    throw new Exception("JSON文件不存在：{$jsonFilePath}");
  }

  // 2. 读取并解析JSON文件
  $jsonContent = file_get_contents($jsonFilePath);
  if ($jsonContent === false) {
    throw new Exception("无法读取JSON文件");
  }

  $staffList = json_decode($jsonContent, true);
  if (json_last_error() !== JSON_ERROR_NONE) {
    throw new Exception("JSON解析失败：" . json_last_error_msg());
  }

  // 3. 验证数据格式
  if (! is_array($staffList)) {
    throw new Exception("JSON数据格式错误，应为数组");
  }

  $total = count($staffList);
  echo "开始导入，共发现 {$total} 条员工信息...\n";

  // 4. 初始化数据库操作类
  $staffDB = new StaffDB();

  // 5. 批量导入数据
  foreach (array_chunk($staffList, $batchSize) as $batch) {
    foreach ($batch as $index => $staffData) {
      $currentIndex = $successCount + $failCount + 1;
      try {
        // echo json_encode($staffData, 256);
        // 验证必要字段
        if (empty($staffData['id']) || empty($staffData['name'])) {
          throw new Exception("缺少必要字段（id或name）");
        }
        //
        if (! is_array($staffData['qualifications'])
          || ! is_array($staffData['organizations'])
          || ! is_array($staffData['groups'])
          || ! is_array($staffData['availableSeats'])
          || ! is_array($staffData['marks'])
        ) {
          throw new Exception("缺少必要字段（roles）");
        }

        // 调用创建方法（自动处理GUID生成和关联数据）
        $guid = $staffDB->createStaff($staffData);
        $successCount++;
        echo "✅ [{$currentIndex}/{$total}] 导入成功：{$staffData['name']} (GUID: {$guid})\n";
      } catch (Exception $e) {
        $failCount++;
        // 替换 ?? 运算符为兼容写法
        $staffName = isset($staffData['name']) ? $staffData['name'] : '未知姓名';
        $errorMsg  = "❌ [{$currentIndex}/{$total}] 导入失败：{$staffName} - {$e->getMessage()}";
        echo $errorMsg . "\n";
        $errorLog[] = $errorMsg;
      }
    }
  }

  // 6. 输出导入结果
  echo "\n===== 导入完成 =====" . "\n";
  echo "总条数：{$total}" . "\n";
  echo "成功：{$successCount}" . "\n";
  echo "失败：{$failCount}" . "\n";

  // 7. 保存错误日志（如果有失败项）
  if (! empty($errorLog)) {
    $logFile = __DIR__ . '/import_error_' . date('YmdHis') . '.log';
    file_put_contents($logFile, implode("\n", $errorLog));
    echo "错误日志已保存至：{$logFile}" . "\n";
  }

} catch (Exception $e) {
  echo "\n===== 导入中断 =====" . "\n";
  echo "致命错误：{$e->getMessage()}" . "\n";
  exit(1);
}
?>
